//
//  ListViewController.m
//  NavigationDemo
//
//  Created by 商广硕 on 2022/7/1.
//

#import "ListViewController.h"
#import "DHGroup.h"
#import "DHDetailsVC.h"
#import "DHCustomButtonVC.h"

@interface ListViewController () <UITableViewDataSource ,UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableview;
//懒加载
@property (nonatomic ,strong) NSArray *groups;
/**
 @property用于定义属性，将会自动生成getter和setter方法，并生成带 “_” 的成员变量，同时属性提供了一些可能会使用的特性来进行声明，包括assign(vs copy),weak,strong,atomic(vs nonatomic),readwrite,readonly
 */
@end

@implementation ListViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.barTitle =@"列表";
    self.rightTitle=@"昂才";
//    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
    self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];
    //设置数据源
    /// A: 代码
    self.tableview.dataSource = self;
    self.tableview.delegate = self;

    ///B:拖线
  
    /// 1:统一设置tableview的所有的行高  2:设置tableview 不同行高,使用代理
//    self.tableview.rowHeight =80;
    //分割线的颜色
    self.tableview.separatorColor=[UIColor blackColor];
    //分割线的样式  UITableViewCellSeparatorStyleNone 无分隔线
    //  self.tableview.separatorStyle =UITableViewCellSeparatorStyleNone ;
   // 设置端距，这里表示separator离左边和右边均80像素
//    self.tableview.separatorInset = UIEdgeInsetsMake(0,80, 0, 80);

    //设置Header  Footer
    self.tableview.tableHeaderView=[UIButton buttonWithType:UIButtonTypeContactAdd];
    if (@available(iOS 13.0, *)) {
        self.tableview.tableFooterView =[UIButton buttonWithType:UIButtonTypeClose];
    } else {
        // Fallback on earlier versions
    }
    //设置
}
- (void)rightBack{
    NSLog(@"6578-----");
}

#pragma mark --懒加载数据
-(NSArray *)groups{
    if(_groups == nil){
        //A:懒加载数据找到plist文件的路径
        NSString *path = [[NSBundle mainBundle] pathForResource:@"cars_simple.plist" ofType:nil ];
        
        //B:加载plist文件
        NSArray *arrayModel =[NSArray arrayWithContentsOfFile:path];
        
        //C:将字典转换成模型
        
        //创建可变数组
        NSMutableArray *model =[NSMutableArray array];
        //遍历数组的🇺🇸字典,将字典转成模型
        for (NSDictionary *dic in arrayModel) {
            NSLog(@"[银行卡数据dic]%@",dic);
            //创建模型对象
            DHGroup *group =[DHGroup groupWithDict:dic];
            //将对象添加数组中
            [model addObject:group];
            
        }
        
        _groups=model;
        
    }
    return  _groups;
}




#pragma  mark  -- 数据源方法
/**
 设置分组将UITableView的style 改成plain
 */
///返回分组数
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
//    return 1;
//    return 2;
//    NSLog(@"%lu",self.groups.count);
    return self.groups.count;
}

///返回每组显示几行数据
- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//    return 7;
    //第一组 4行
//    if (section ==0) {
//        return 4;
//    }else {
//        //第2组 3行
//        return 3;
//    }
    //根据组索引 获取对象
    DHGroup *group=  self.groups[section];
    return group.cars.count;
}
///返回每行的单元格
- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
 /**
  //当前是第几行
 indexPath.row
   //表示当前第几组
  ndexPath.section
  */
     ///单元格重用
    //声明单元格的重用ID
    NSString *ID =@"list_id";
    //根据重用ID 去缓存池中查找对应的cell
    UITableViewCell *cell =   [tableView dequeueReusableCellWithIdentifier:ID];
    if(cell == nil){
        //空,创建一个cell.
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    

    
   //创建一个单元格对象并返回
//    UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    
   //为单元格指定数据
//    if(indexPath.section ==0){
//        cell.textLabel.text=@"第一组";
//    }else if(indexPath.section ==1){
//        cell.textLabel.text=@"第2组";
//    }
    // 1,获取模型数据
    //2,创建单元格cell
    //3,把模型中的数据设置给单元格中的控件
    //4,返回单元格cell
    DHGroup *group =self.groups[indexPath.section];
    NSString *str=  group.cars[indexPath.row];
    cell.textLabel.text=str;
    /// cell右边自定义样式
    /// 自定义  UIButton
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
    btn.frame = CGRectMake(0, 0, 90, 40);
    [btn setTitle:@"提示" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [btn.titleLabel setFont:[UIFont boldSystemFontOfSize:14]];
    [btn setImage:[UIImage imageNamed:@"image_face_eye"] forState:(UIControlStateNormal)];
    // 默认的是图片在左title 在右
        // 1,图片在右边,title 在左边 可以调左边距 也可以调右边距
    //    button.imageEdgeInsets = UIEdgeInsetsMake(0,0,0,-150);// 和(0,150,0,0) 一样效果
    //    button.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0,50); // (0,-50,0,0) 一样效果
        // 2 图片在上 title 在下面 // 具体数字可以自己调
     //   button.imageEdgeInsets = UIEdgeInsetsMake(- 20,50,0,0);
       // button.titleEdgeInsets = UIEdgeInsetsMake(32, 0, 0,0);

    btn.backgroundColor=[UIColor redColor];
   

   ///设置边框
//    btn.layer.maskedCorners =YES;
    btn.layer.borderWidth=1;
    btn.layer.backgroundColor = (__bridge CGColorRef _Nullable)([UIColor blueColor]);
    btn.layer.cornerRadius = 16;
    
    btn.tag = indexPath.row;// 给按钮绑定tag，好知道点击的是哪行
    
//    objc_setAssociatedObject(btn,key, val,OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    [btn addTarget:self action:@selector(Download:) forControlEvents:UIControlEventTouchUpInside];
    cell.accessoryView =btn;
    
    /// cell右边指示样式
//    cell.accessoryType= UITableViewCellAccessoryDisclosureIndicator;
    /*
    UITableViewCellAccessoryNone 没有
    UITableViewCellAccessoryDisclosureIndicator 箭头
    UITableViewCellAccessoryDetailDisclosureButton 感叹号和箭头
    UITableViewCellAccessoryCheckmark 对勾
    UITableViewCellAccessoryDetailButton 感叹号
    */

    //cell 背景色
    if(indexPath.row % 2 ==0){
      //  cell.backgroundColor=[UIColor redColor];
    }else{
        //cell.backgroundColor=[UIColor brownColor];
    }
    //设置单元格背景图片
//    UIImageView *img=    [[UIImageView alloc] init];
//    [img setImage:[UIImage imageNamed:@"bj_wallet.png"]];
//    cell.backgroundView =img;
    
    //点击选择中的单元格背景色
//    UIView *view =[[UIView alloc] init];
//    view.backgroundColor =[UIColor blueColor];
//    cell.selectedBackgroundView =view;

 
    
    return cell;
}
///每组标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
//    if(section ==0){
//        return @"第一";
//    }else{
//        return @"第二";
//    }
    DHGroup *group=  self.groups[section];
    return group.title;
}

///每组组尾
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section{
//    if(section ==0){
//        return @"第一尾巴";
//    }else{
//        return @"第二尾巴";
//    }
    
    DHGroup *group=  self.groups[section];
    return group.desc;

}
#pragma mark  --代理方法 计算分组数>>>计算每组的行数>>>生成分组索引>>>依次生成每组的单元格


/// 设置每行高度（每行高度可以不一样）

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    if(indexPath.row % 2 ==0){
        return 60;
    }else{
        return 50;
    }
}
///设置分组标题内容高度
-(CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
        if(section==0){
            return 50;
        }
        return 45;
}
///设置尾部说明内容高度
-(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{
    return 40;
}


#pragma  mark --右侧的索引栏
/**
 * 实现右侧的索引栏
 * 通过实现数据源协议的- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView

 * 点击右侧索引栏中的文字, 会根据索引的顺序跳转到左侧对应的位置

 * 获取group数组中的每个对象的title值, 并返回到一个NSArray中
    [self.groups valueForKeyPath:@"title"]
 */

- (NSArray<NSString *> *)sectionIndexTitlesForTableView:(UITableView *)tableView{
    return [self.groups valueForKeyPath:@"title"];
}

#pragma  mark --点击事件
/**
 1> 监听每个cell的点击事件
 * 通过代理来监听,
 ** 选中某行: - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 ** 取消选中某行: - (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

 */
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
   
    NSLog(@"点击 第%lu组，第%lu行", (long)indexPath.section ,(long)indexPath.row);
    if(indexPath.section == 0 &&  indexPath.row == 0){
        DHCustomButtonVC *CustomButtonVC = [[DHCustomButtonVC alloc] init];

        [self.navigationController pushViewController:CustomButtonVC animated:YES];
        
    }else{
        DHDetailsVC *details = [[DHDetailsVC alloc] init];

        DHGroup *group =self.groups[indexPath.section];
        NSString *str=  group.cars[indexPath.row];
        str =[str stringByAppendingString:@"--正向传值" ];
        // 将代理对象设置成B
        details.delegate = self;

        details.listText =str;
        [self.navigationController pushViewController:details animated:YES];
    }
        
  
}
//实现 DHDetailsVC 的方法
-(void)showViewGiveValue:(NSString *)text{
    NSLog(@"---%@",text);
   
}

#pragma mark--cell向左滑动删除,编辑等功能
////进入编辑模式，按下出现的编辑按钮后,进行删除操作  iOS8必须实现这个代理方法才会有侧滑效果
////系统侧滑 ：cell侧滑在iOS8-10 的写法，以及iOS11.0以后的新型处理方式

-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
    return YES;
}

// 定义编辑样式
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleDelete;
}
////左滑之后会出现的字
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return  @"删除";
}



// 进入编辑模式，按下出现的编辑按钮后,进行删除操作
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {

        NSLog(@"点击");
    }

}

////iOS11 后的新方法,,  可以设置image和title
- ( UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath  API_AVAILABLE(ios(11.0)) API_AVAILABLE(ios(11.0)){
    //删除
    if (@available(iOS 11.0, *)) {
        
            UIContextualAction *deleteRowAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"delete" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
                DHGroup *group =self.groups[indexPath.section];
                NSMutableArray *aar =  [NSMutableArray arrayWithArray:group.cars];
                //删除一条数据
                [ aar  removeObjectAtIndex:indexPath.row];
                //将删除的数据 赋值给原数据
                group.cars = [NSArray arrayWithArray:aar];
                // 删除带动画效果
                //        [self.tableview deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:UITableViewRowAnimationLeft];
                //tableview 刷新数据
                //        [self.tableview reloadData];
                //删除数据 -局部刷新
                [self.tableview deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationLeft];
                //更新数据（没有添加和删除数据，仅仅是修改已经存在的数据）-局部刷新
                //        [self.tableView relaodRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationMiddle];
                //添加数据 -局部刷新
                //        [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationRight];
                
                
            }];
            deleteRowAction.image = [UIImage imageNamed:@"update_close"];
            deleteRowAction.backgroundColor = [UIColor redColor];
            
            UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]];
            return config;
        }
        
    return nil;
    
}
    

//Download
-(IBAction)Download:(id)sender{
    UIButton *btn =(UIButton *) sender;
    
    NSLog(@"点击下载第%ld个",(long)btn.tag);
   
}
@end
